package negocio.daos;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import negocio.entidades.Prova;
import negocio.entidades.ProvaAluno;
import negocio.entidades.Questao;
import negocio.entidades.Tema;

public class ProvaDAO {
	private EntityManager em;
	
	public ProvaDAO(EntityManager em){
		this.em = em;
	}
	
	public Prova salvar(Prova p) throws Exception{
		if (p.getId() > 0){
			if (consultarPorId(p.getId()) != null){
				em.merge(p);
			}
		}else{
			em.persist(p);
		}
		return p;
	}
	
	public void excluir(long id) throws Exception{
		Prova p = consultarPorId(id);
		if (p != null){
				em.remove(p);
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<Prova> listar(String descricao, String nomeDisciplina) {
	Query q = em.createQuery(
			"select p from Prova p left join fetch p.provaAlunos where p.descricao like lower('"
					+ descricao + "%') and p.disciplina.nome like lower('"
					+ nomeDisciplina + "%')", Prova.class);
	return q.getResultList();
	}
	
	public Prova consultarPorId(long id){
		Prova p = (Prova) em.createQuery(
				"select p from Prova p left join fetch p.provaAlunos where p.id =" + id).getSingleResult();
		return p;
	}

	public List<ProvaAluno> listarProvasAlunos(long id) {
		Query q = em.createQuery(
				"select pa from ProvaAluno pa where pa.prova.id ="+id, Prova.class);
		return q.getResultList();
	}

	public List<Tema> listarTemasQuestoes() {
		Query q = em.createNativeQuery(
				"select * from Tema where id in (select distinct tema_id from Questao_Tema)", Tema.class);
		return q.getResultList();
	}

	public List<Questao> selecionarPossiveisQuestoesProva(String sql) {
		Query q = em.createNativeQuery(sql, Questao.class);
		return q.getResultList();
	}
}
